library(flexdashboard)
## Warning: le package 'flexdashboard' a été compilé avec la version R 4.5.2
library(reticulate)
## Warning: le package 'reticulate' a été compilé avec la version R 4.5.2
library(readr)
library(dplyr)
## Warning: le package 'dplyr' a été compilé avec la version R 4.5.2
##
## Attachement du package : 'dplyr'
## Les objets suivants sont masqués depuis 'package:stats':
##
## filter, lag
## Les objets suivants sont masqués depuis 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
## Warning: le package 'ggplot2' a été compilé avec la version R 4.5.2
library(tidyr)
library(knitr)
# Force R à utiliser l'environnement virtuel de ton projet VSCode
# On remonte d'un niveau (..) car ton Rmd est dans 'Partie1' et .venv est au-dessus
use_virtualenv("../.venv", required = TRUE)
# Importation
surf_lib <- import("surf_scrap")
# 4. Exécuter le scraping
# NETTOYEZ BIEN L'URL : elle doit être une simple chaîne de caractères
URL <- "https://www.surf-report.com/meteo-surf/lacanau-s1043.html"
CSV_OUT <- "data_surf.csv"
# Appel de la fonction Python
surf_lib$scrape_surf_report(URL, output_csv_path = CSV_OUT)
## Les données ont été sauvegardées avec succès dans data_surf.csv
## Day Hour Waves_size Wind_speed
## 1 Vendredi 9 Janvier 06:00 5.2 - 7.8 53
## 2 Vendredi 9 Janvier 09:00 5.2 - 7.8 52
## 3 Vendredi 9 Janvier 12:00 5.4 - 8.1 57
## 4 Vendredi 9 Janvier 15:00 5.3 - 8.0 53
## 5 Vendredi 9 Janvier 18:00 5.0 - 7.6 50
## 6 Vendredi 9 Janvier 21:00 4.7 - 7.1 48
## 7 Samedi 10 Janvier 06:00 4.0 - 6.0 32
## 8 Samedi 10 Janvier 09:00 3.7 - 5.6 33
## 9 Samedi 10 Janvier 12:00 3.6 - 5.4 35
## 10 Samedi 10 Janvier 15:00 3.5 - 5.2 33
## 11 Samedi 10 Janvier 18:00 3.3 - 4.9 29
## 12 Samedi 10 Janvier 21:00 3.1 - 4.6 24
## 13 Dimanche 11 Janvier 06:00 2.3 - 3.5 15
## 14 Dimanche 11 Janvier 09:00 2.1 - 3.1 18
## 15 Dimanche 11 Janvier 12:00 1.8 - 2.7 22
## 16 Dimanche 11 Janvier 15:00 1.6 - 2.4 24
## 17 Dimanche 11 Janvier 18:00 1.4 - 2.1 25
## 18 Dimanche 11 Janvier 21:00 1.3 - 2.0 23
## 19 Lundi 12 Janvier 06:00 1.7 - 2.6 27
## 20 Lundi 12 Janvier 09:00 1.9 - 2.9 33
## 21 Lundi 12 Janvier 12:00 2.1 - 3.1 33
## 22 Lundi 12 Janvier 15:00 2.3 - 3.4 32
## 23 Lundi 12 Janvier 18:00 2.4 - 3.6 31
## 24 Lundi 12 Janvier 21:00 2.4 - 3.6 32
## 25 Mardi 13 Janvier 06:00 2.0 - 3.0 24
## 26 Mardi 13 Janvier 09:00 2.0 - 3.0 33
## 27 Mardi 13 Janvier 12:00 2.3 - 3.4 35
## 28 Mardi 13 Janvier 15:00 2.4 - 3.6 38
## 29 Mardi 13 Janvier 18:00 2.3 - 3.4 36
## 30 Mardi 13 Janvier 21:00 2.2 - 3.3 35
## 31 Mercredi 14 Janvier 06:00 2.5 - 3.8 31
## 32 Mercredi 14 Janvier 09:00 2.8 - 4.2 33
## 33 Mercredi 14 Janvier 12:00 2.9 - 4.4 27
## 34 Mercredi 14 Janvier 15:00 2.9 - 4.4 25
## 35 Mercredi 14 Janvier 18:00 3.0 - 4.6 22
## 36 Mercredi 14 Janvier 21:00 3.0 - 4.5 18
## 37 Jeudi 15 Janvier 06:00 2.2 - 3.3 22
## 38 Jeudi 15 Janvier 09:00 2.0 - 3.0 23
## 39 Jeudi 15 Janvier 12:00 1.8 - 2.7 23
## 40 Jeudi 15 Janvier 15:00 1.7 - 2.6 21
## 41 Jeudi 15 Janvier 18:00 1.6 - 2.4 21
## 42 Jeudi 15 Janvier 21:00 1.5 - 2.3 23
## Wind_direction
## 1 Orientation vent Ouest Nord Ouest
## 2 Orientation vent Ouest
## 3 Orientation vent Ouest Nord Ouest
## 4 Orientation vent Ouest Nord Ouest
## 5 Orientation vent Nord Ouest
## 6 Orientation vent Nord Ouest
## 7 Orientation vent Nord Ouest
## 8 Orientation vent Nord Ouest
## 9 Orientation vent Nord Ouest
## 10 Orientation vent Nord Ouest
## 11 Orientation vent Nord Ouest
## 12 Orientation vent Nord Nord Ouest
## 13 Orientation vent Sud Est
## 14 Orientation vent Sud Est
## 15 Orientation vent Sud Sud Est
## 16 Orientation vent Sud Sud Est
## 17 Orientation vent Sud
## 18 Orientation vent Sud Sud Est
## 19 Orientation vent Sud
## 20 Orientation vent Sud
## 21 Orientation vent Sud Sud Ouest
## 22 Orientation vent Sud
## 23 Orientation vent Sud
## 24 Orientation vent Sud
## 25 Orientation vent Sud Est
## 26 Orientation vent Sud Sud Est
## 27 Orientation vent Sud
## 28 Orientation vent Sud Sud Ouest
## 29 Orientation vent Sud Sud Ouest
## 30 Orientation vent Sud
## 31 Orientation vent Ouest Sud Ouest
## 32 Orientation vent Ouest Sud Ouest
## 33 Orientation vent Ouest
## 34 Orientation vent Ouest
## 35 Orientation vent Ouest
## 36 Orientation vent Ouest
## 37 Orientation vent Sud Ouest
## 38 Orientation vent Sud Sud Ouest
## 39 Orientation vent Sud
## 40 Orientation vent Sud Sud Est
## 41 Orientation vent Sud Est
## 42 Orientation vent Sud Est
# 5. Charger les données pour R
data <- readr::read_csv(CSV_OUT)
## Rows: 42 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (3): Day, Waves_size, Wind_direction
## dbl (1): Wind_speed
## time (1): Hour
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# 3. Préparation des KPIs (Nettoyage des plages de données)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ stringr 1.5.2
## ✔ lubridate 1.9.4 ✔ tibble 3.3.0
## ✔ purrr 1.1.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# 2. Préparation des données (Nettoyage pour KPIs)
df_clean <- data %>%
# On sépare "5.0 - 7.6" pour calculer la moyenne de la plage
separate(Waves_size, into = c("w_min", "w_max"), sep = " - ", convert = TRUE, remove = FALSE) %>%
mutate(
Wave_Mean = (w_min + w_max) / 2,
Wind_Speed_Num = as.numeric(gsub("[^0-9.]", "", Wind_speed)),
# Calcul du Score de Qualité (Consigne : <1m wave, <50km/h wind, Nord)
Is_North = grepl("Nord", Wind_direction),
Quality_Score = case_when(
Wave_Mean <= 1.0 & Wind_Speed_Num <= 50 & Is_North ~ 100,
Wave_Mean <= 2.0 & Wind_Speed_Num <= 60 ~ 60,
TRUE ~ 30
),
Time_Idx = row_number()
)
# Identification des moments clés
best_moment <- df_clean %>% arrange(desc(Quality_Score), desc(Wave_Mean)) %>% head(1)
highest_wave <- df_clean %>% arrange(desc(w_max)) %>% head(1)
valueBox(
value = paste(best_moment$Day, "@", best_moment$Hour),
caption = "Meilleur moment pour pratiquer",
icon = "fa-star",
color = "success"
)
Dimanche 11 Janvier @ 15:00:00
valueBox(
value = paste(highest_wave$w_max, "m"),
caption = paste("Prévue le", highest_wave$Day),
icon = "fa-arrows-alt-v",
color = "info"
)
8.1 m
gauge(best_moment$Quality_Score, min = 0, max = 100, symbol = '%', gaugeSectors(
success = c(80, 100), warning = c(40, 79), danger = c(0, 39)
))
ggplot(df_clean, aes(x = Time_Idx, y = Wave_Mean)) +
geom_area(fill = "#0077b6", alpha = 0.3) +
geom_line(color = "#0077b6", size = 1) +
theme_minimal() +
labs(x = "Chronologie des prévisions", y = "Taille Moyenne (m)")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
ggplot(df_clean, aes(x = Time_Idx, y = Wind_Speed_Num)) +
geom_col(fill = "#90e0ef") +
theme_minimal() +
labs(x = "Chronologie des prévisions", y = "Vitesse (km/h)")
data %>%
select(Day, Hour, Waves_size, Wind_direction) %>%
kable()
| Day | Hour | Waves_size | Wind_direction |
|---|---|---|---|
| Vendredi 9 Janvier | 06:00:00 | 5.2 - 7.8 | Orientation vent Ouest Nord Ouest |
| Vendredi 9 Janvier | 09:00:00 | 5.2 - 7.8 | Orientation vent Ouest |
| Vendredi 9 Janvier | 12:00:00 | 5.4 - 8.1 | Orientation vent Ouest Nord Ouest |
| Vendredi 9 Janvier | 15:00:00 | 5.3 - 8.0 | Orientation vent Ouest Nord Ouest |
| Vendredi 9 Janvier | 18:00:00 | 5.0 - 7.6 | Orientation vent Nord Ouest |
| Vendredi 9 Janvier | 21:00:00 | 4.7 - 7.1 | Orientation vent Nord Ouest |
| Samedi 10 Janvier | 06:00:00 | 4.0 - 6.0 | Orientation vent Nord Ouest |
| Samedi 10 Janvier | 09:00:00 | 3.7 - 5.6 | Orientation vent Nord Ouest |
| Samedi 10 Janvier | 12:00:00 | 3.6 - 5.4 | Orientation vent Nord Ouest |
| Samedi 10 Janvier | 15:00:00 | 3.5 - 5.2 | Orientation vent Nord Ouest |
| Samedi 10 Janvier | 18:00:00 | 3.3 - 4.9 | Orientation vent Nord Ouest |
| Samedi 10 Janvier | 21:00:00 | 3.1 - 4.6 | Orientation vent Nord Nord Ouest |
| Dimanche 11 Janvier | 06:00:00 | 2.3 - 3.5 | Orientation vent Sud Est |
| Dimanche 11 Janvier | 09:00:00 | 2.1 - 3.1 | Orientation vent Sud Est |
| Dimanche 11 Janvier | 12:00:00 | 1.8 - 2.7 | Orientation vent Sud Sud Est |
| Dimanche 11 Janvier | 15:00:00 | 1.6 - 2.4 | Orientation vent Sud Sud Est |
| Dimanche 11 Janvier | 18:00:00 | 1.4 - 2.1 | Orientation vent Sud |
| Dimanche 11 Janvier | 21:00:00 | 1.3 - 2.0 | Orientation vent Sud Sud Est |
| Lundi 12 Janvier | 06:00:00 | 1.7 - 2.6 | Orientation vent Sud |
| Lundi 12 Janvier | 09:00:00 | 1.9 - 2.9 | Orientation vent Sud |
| Lundi 12 Janvier | 12:00:00 | 2.1 - 3.1 | Orientation vent Sud Sud Ouest |
| Lundi 12 Janvier | 15:00:00 | 2.3 - 3.4 | Orientation vent Sud |
| Lundi 12 Janvier | 18:00:00 | 2.4 - 3.6 | Orientation vent Sud |
| Lundi 12 Janvier | 21:00:00 | 2.4 - 3.6 | Orientation vent Sud |
| Mardi 13 Janvier | 06:00:00 | 2.0 - 3.0 | Orientation vent Sud Est |
| Mardi 13 Janvier | 09:00:00 | 2.0 - 3.0 | Orientation vent Sud Sud Est |
| Mardi 13 Janvier | 12:00:00 | 2.3 - 3.4 | Orientation vent Sud |
| Mardi 13 Janvier | 15:00:00 | 2.4 - 3.6 | Orientation vent Sud Sud Ouest |
| Mardi 13 Janvier | 18:00:00 | 2.3 - 3.4 | Orientation vent Sud Sud Ouest |
| Mardi 13 Janvier | 21:00:00 | 2.2 - 3.3 | Orientation vent Sud |
| Mercredi 14 Janvier | 06:00:00 | 2.5 - 3.8 | Orientation vent Ouest Sud Ouest |
| Mercredi 14 Janvier | 09:00:00 | 2.8 - 4.2 | Orientation vent Ouest Sud Ouest |
| Mercredi 14 Janvier | 12:00:00 | 2.9 - 4.4 | Orientation vent Ouest |
| Mercredi 14 Janvier | 15:00:00 | 2.9 - 4.4 | Orientation vent Ouest |
| Mercredi 14 Janvier | 18:00:00 | 3.0 - 4.6 | Orientation vent Ouest |
| Mercredi 14 Janvier | 21:00:00 | 3.0 - 4.5 | Orientation vent Ouest |
| Jeudi 15 Janvier | 06:00:00 | 2.2 - 3.3 | Orientation vent Sud Ouest |
| Jeudi 15 Janvier | 09:00:00 | 2.0 - 3.0 | Orientation vent Sud Sud Ouest |
| Jeudi 15 Janvier | 12:00:00 | 1.8 - 2.7 | Orientation vent Sud |
| Jeudi 15 Janvier | 15:00:00 | 1.7 - 2.6 | Orientation vent Sud Sud Est |
| Jeudi 15 Janvier | 18:00:00 | 1.6 - 2.4 | Orientation vent Sud Est |
| Jeudi 15 Janvier | 21:00:00 | 1.5 - 2.3 | Orientation vent Sud Est |
Ce dashboard automatise la récupération des données de surf via un script Python (requests/BeautifulSoup). Les données sont ensuite traitées dans R : - Les plages de taille de vagues sont converties en moyenne arithmétique. - Le score de qualité est calculé selon les critères : Vagues < 1m, Vent < 50km/h et direction Nord.